"""
2022.09.13
"""

import numpy as np 
import matplotlib.pyplot as plt 
import mpl_toolkits.axisartist as axisartist # 带有箭头的坐标系
from matplotlib.font_manager import FontProperties
font = FontProperties(fname='/usr/share/fonts/myfont/YaHeiConsolas.ttf') # 使用自己喜欢的字体

fig = plt.figure()
ax = axisartist.Subplot(fig, 1,1,1)
fig.add_axes(ax)

# 让原来的边框不可见
ax.axis["right"].set_visible(False)
ax.axis["top"].set_visible(False)
ax.axis["left"].set_visible(False)
ax.axis["bottom"].set_visible(False)

# 添加x轴，并将其命名为x1
ax.axis["x1"] = ax.new_fixed_axis(loc="top", offset=(0, 0)) # 前面一个数字左右移动，后面一个上下移动
ax.axis["x1"].set_axisline_style("->", size = 2.0) # 箭头类型和大小
ax.axis["x1"].major_ticklabels.set_color("b") # 坐标系上刻度颜色
ax.axis["x1"].label.set_text(r"$x-axis$") # 坐标系名称
ax.set_xlim((0, 1)) # 控制坐标范围
ax.set_xticks([0.0, 0.25, 0.5, 0.75, 1]) # 添加刻度
ax.set_xticklabels([r"$\frac{\pi}{4}$", r"$\frac{2\pi}{4}$", r"$\frac{3\pi}{4}$",
                    r"$\frac{4\pi}{4}$",r"$\frac{5\pi}{4}$"]) # 添加刻度名称，以LaTeX语法表示
# 添加y轴，并将其命名为y1
ax.axis["y1"] = ax.new_fixed_axis(loc="left", offset=(0, 0))
ax.axis["y1"].set_axisline_style("->", size = 2.0)
ax.axis["y1"].major_ticklabels.set_color("m")
ax.axis["y1"].label.set_text(r"$y-axis$") 
ax.set_ylim((-5, 0))
ax.set_yticks([-5, -4, -3, -2, -1, 0]) # 添加刻度
ax.set_yticklabels([r"$-5dB$", r"$-4dB$", r"$-3dB$",
                    r"$-2dB$",r"$-1dB$", r"$0dB$"]) 

# 增加网格，包括线型，颜色和线宽
ax.grid(True, linestyle='--', color='gray', linewidth=0.8)
# 增加名称，并按照配图的一般方式放在下部
ax.set_title("画图示例", fontproperties=font, fontsize=10, y=-0.1)

# 第二种经常使用的带箭头坐标系
fig = plt.figure()
ax = axisartist.Subplot(fig, 1,1,1)
fig.add_axes(ax)

# 让原来的边框不可见
ax.axis["right"].set_visible(False)
ax.axis["top"].set_visible(False)
ax.axis["left"].set_visible(False)
ax.axis["bottom"].set_visible(False)

ax.axis["x1"] = ax.new_floating_axis(0, 0) # 第一个参数代表是水平轴[0]，垂直轴[1]
ax.axis["x1"].set_axisline_style("-|>", size = 2.0)
ax.axis["y1"] = ax.new_floating_axis(1, 0)
ax.axis["y1"].set_axisline_style("-|>", size = 2.0)
ax.set_xlim((-5, 5))
ax.set_ylim((0, 3))
ax.set_yticks([0.5, 1.0, 1.5, 2.0, 2.5, 3.0]) # 通常为了图看起来更舒服些，会将y轴的原点不显示，只显示x轴原点
# 增加网格，包括线型，颜色和线宽
ax.grid(True, linestyle='--', color='gray', linewidth=0.8)
# 增加名称，并按照配图的一般方式放在下部
ax.set_title("画图示例2", fontproperties=font, fontsize=10, y=-0.1)

# print(dir(ax))

plt.show()